Alexander Larsson [Tue, 3 Apr 2018 09:36:57 +0000 (11:36 +0200)]
pull: Don't save summary to cache before validating signatures
In case of some kind of race or other weirdness we might be getting
non-matching versions of summary.sig and summary, where summary.sig
is the latest version. Currently we're saving them to the cache
directly after downloading them successfully, but they will then fail
to gpg validate. Then on the next run we'll keep using the cached files
even if they are incorrect, until summary.sig changes upstream.
This changes the order so that we verify the signatures before saving
to the cache, thus ensuring that we don't end up in a stuck state.
Fixes https://github.com/ostreedev/ostree/issues/1523
Closes: #1529
Approved by: cgwalters
Colin Walters [Tue, 3 Apr 2018 13:59:20 +0000 (09:59 -0400)]
ci: Drop patches when building RPM
Things fell over when downstream added a patch we had already merged
upstream.
Closes: #1530
Approved by: jlebon
Matthew Leeds [Thu, 29 Mar 2018 07:03:43 +0000 (00:03 -0700)]
lib/repo-pull: Improve error message when no summary is found
In ostree_repo_remote_fetch_summary_with_options(), if no summary is
found on the server and summary verification is enabled, the error
message implies that it's the summary signature that's missing, which is
misleading. This commit adds a more specific error message for the case
of a missing summary, which has the side effect of explicitly checking
for the case that signatures != NULL && summary == NULL after
repo_remote_fetch_summary(), even though that should never happen.
One effect of this is that if you run "flatpak remote-add" with an
incorrect URL you get a more helpful error message, and similarly for
other flatpak operations and other users of ostree.
Closes: #1522
Approved by: cgwalters
Matthew Leeds [Sat, 31 Mar 2018 01:11:45 +0000 (18:11 -0700)]
lib/repo-pull: Rename a variable for clarity
In libostree, the phrase "commit metadata" has two meanings-- one is the
first dictionary in a commit GVariant that stores metadata such as ref
bindings, and the other is the commit metadata in the summary file,
which stores the commit size, checksum, and timestamp. In
find_remotes_process_refs(), the entire commit GVariant was being
referred to as commit metadata, so this commit changes the variable
name and a comment to make things more consistent.
Closes: #1528
Approved by: cgwalters
Matthew Leeds [Thu, 29 Mar 2018 19:44:16 +0000 (12:44 -0700)]
lib: Fix a few comments
Closes: #1526
Approved by: cgwalters
Alexander Larsson [Thu, 29 Mar 2018 13:19:33 +0000 (15:19 +0200)]
Don't write to parent repo
In _try_clone_from_payload_link, don't try to do the clone in the
parent repo, because we don't want to modify that. parent repos are
typically used when you want a shared, immutable base.
For example in flatpak, the parent repo is the system repo which you
don't have write access to, so any modification to it will fail with
EACCES, making it impossible to install via the system helper.
Closes: #1524
Approved by: cgwalters
Matthew Leeds [Thu, 29 Mar 2018 06:11:50 +0000 (23:11 -0700)]
libotutil/checksum-utils: Fix memory management
Ostree uses the OtChecksum data structure as a wrapper around GChecksum
(depending on what libraries are available at compile time). According
to the docs for g_checksum_get_digest(), a GChecksum value can no longer
be updated after that function is called. Ostree enforces this by
setting "initialized" to FALSE after getting the digest, but this leads
to ot_checksum_clear() avoiding freeing any memory, leading to leaks. So
this commit adds a "closed" value that gets set when getting a digest
and checked when updating the value, so the initialized value can be
used only for memory management.
Closes: #1521
Approved by: jlebon
Matthew Leeds [Thu, 29 Mar 2018 05:03:33 +0000 (22:03 -0700)]
lib/commit: Fix a memory leak of OtChecksum
Closes: #1521
Approved by: jlebon
Matthew Leeds [Wed, 28 Mar 2018 20:33:08 +0000 (13:33 -0700)]
lib/repo-pull: Document all options in pull_from_remotes_async
ostree_repo_pull_from_remotes_async() passes along some options to
ostree_repo_pull_with_options(), so document them.
Closes: #1519
Approved by: cgwalters
Matthew Leeds [Wed, 28 Mar 2018 22:56:13 +0000 (15:56 -0700)]
tests: Fix unit test for ref-binding metadata
The `ostree show` command is currently failing due to incorrect syntax,
but we want to check that it fails because the metadata isn't there.
Closes: #1520
Approved by: cgwalters
Colin Walters [Mon, 26 Mar 2018 17:23:25 +0000 (13:23 -0400)]
tests/installed: Fix TESTS= being empty
I broke this in https://github.com/ostreedev/ostree/pull/1509/commits/
9b55aaea6f34b7094c44932a3c2e1cf2d54634fd
I'd obviously tested *setting* it locally worked, but I didn't test that
not having it set ran all the tests.
I don't understand why we were doing the `+ ` pattern before; let's
just check if it's empty.
Closes: #1516
Approved by: jlebon
Colin Walters [Fri, 23 Mar 2018 20:02:38 +0000 (16:02 -0400)]
lib/deploy: Port final bootconfig writing to new style
The main blocker for doing this before was the `goto out` handling
for remounting `/boot`. Handle that by factoring out the bits that
require it to a helper function, and do the C/GError equivalent of
"try/finally".
Not prep for anything right now, just decided to do this since I had the file
open.
Closes: #1515
Approved by: jlebon
Colin Walters [Fri, 23 Mar 2018 19:33:38 +0000 (15:33 -0400)]
lib/deploy: Split /etc merge into two stages
For staged deploy, we want to pay the cost of creating copies from
`/usr/etc` → `/etc` at stage time, since it can be expensive. (We
want to minimize time spent during shutdown).
Split it up into two functions; the logic is also simply clearer.
Closes: #1514
Approved by: jlebon
Colin Walters [Fri, 23 Mar 2018 19:25:14 +0000 (15:25 -0400)]
lib/deploy: Set kargs in one place
Prep for deployment staging. We had the code to hande "explicit kargs" in one
place, but the "use merge deployment" karg bits mixed in with the "/etc merge"
logic. Those are separate things, and it's better to have karg handling in one
place.
Closes: #1514
Approved by: jlebon
Colin Walters [Thu, 22 Mar 2018 18:57:33 +0000 (14:57 -0400)]
lib/deltas: Some misc declare-and-initialize porting
Also some `glnx_fstatat_allow_noent()`. Not specifically prep for anything.
Closes: #1511
Approved by: jlebon
Colin Walters [Thu, 22 Mar 2018 20:56:08 +0000 (16:56 -0400)]
Post-release version bump
Closes: #1512
Approved by: jlebon
Colin Walters [Thu, 22 Mar 2018 20:52:04 +0000 (16:52 -0400)]
Release 2018.4
A quick turnaround to include one PR: https://github.com/ostreedev/ostree/pull/1508
"switchroot: Ensure /run/ostree-booted is created even without initramfs"
This fixes ostree when booting without an initramfs. Thanks to @akiernan for the
bug report and helping review the fix! I'm working on enhancing
the test suite, which will help in adding some coverage here.
Also for this release I'm going to avoid adding a "stub" symbol section
to the `-released.sym` file; I don't believe it's necessary.
Closes: #1512
Approved by: jlebon
Colin Walters [Thu, 22 Mar 2018 17:11:07 +0000 (13:11 -0400)]
lib/deltas: Squash some GCC maybe-uninitialized warnings
These show up in the RPM build, I didn't yet try to figure out why we're not
reproducing them outside of that.
Closes: #1510
Approved by: jlebon
Colin Walters [Thu, 22 Mar 2018 14:14:22 +0000 (10:14 -0400)]
switchroot: Ensure /run/ostree-booted is created even without initramfs
See https://mail.gnome.org/archives/ostree-list/2018-March/msg00012.html
If ostree-prepare-root is run as pid 1 (i.e we're not using an initramfs), then
anything we write outside the target sysroot (such as `/run/ostree-booted`) will
be lost.
Since `ostree-remount.service` runs fairly early in boot, and is triggered via
`ConditionKernelCommandLine=ostree`, we can just touch the file there in
addition.
Closes: #1508
Approved by: akiernan
Colin Walters [Thu, 22 Mar 2018 16:47:07 +0000 (12:47 -0400)]
tests/payload-link: Just test a single duplicate object
We were previously assuming that the host content had duplicates,
which...hopefully it doesn't! We shouldn't rely on that.
Also this test is slow in production and flaky. Let's just test
a single duplicate object.
Closes: #1509
Approved by: jlebon
Colin Walters [Thu, 22 Mar 2018 16:45:51 +0000 (12:45 -0400)]
tests: Small tweaks for local iteration
Support e.g. `-e tests=payload-link`, to choose specific tests for more rapid
iteration, and allow skipping tmpdir cleanup to be able to debug.
Closes: #1509
Approved by: jlebon
Colin Walters [Thu, 22 Mar 2018 15:36:33 +0000 (11:36 -0400)]
tests/installed: Use temporary directories more consistently
This is prep for splitting off "nondestructive" tests which
we can run in parallel from the destructive/invasive ones which
e.g. change the host refspec, do deployments.
The `cd` invocation in `prepare_tmpdir` wasn't working because we were running
it in a subshell. Fix this by dropping the subshell.
Closes: #1509
Approved by: jlebon
Colin Walters [Thu, 22 Mar 2018 14:55:16 +0000 (10:55 -0400)]
tests/str: Verify standard-test-roles is installed
This tripped me up when regenerating my dev container.
Closes: #1509
Approved by: jlebon
Colin Walters [Thu, 22 Mar 2018 14:37:07 +0000 (10:37 -0400)]
tests/str: Rework sysinstall-tests to be an entrypoint
Prep for creating more types of tests.
Move copying of `tests/` into the sysinstall-tests rather than `overlay-git`
as not all test types may need that.
Factored out of https://github.com/ostreedev/ostree/pull/1501
Closes: #1509
Approved by: jlebon
Colin Walters [Wed, 21 Mar 2018 20:42:07 +0000 (16:42 -0400)]
ci/papr: Fix artifacts
Of course we only notice these things are broken when the CI breaks.
Also add some comments and flip flatpak to `required: true` since it should be
now.
Closes: #1507
Approved by: jlebon
Colin Walters [Wed, 21 Mar 2018 14:17:01 +0000 (10:17 -0400)]
Post-release version bump
Closes: #1506
Approved by: jlebon
Colin Walters [Wed, 21 Mar 2018 14:14:12 +0000 (10:14 -0400)]
Release 2018.3
It's been over a month since 2018.2; we have a few features and various fixes,
and the "stage" work pending which is pretty invasive. Time for a new release!
Closes: #1506
Approved by: jlebon
Colin Walters [Mon, 19 Mar 2018 16:10:31 +0000 (12:10 -0400)]
lib/deploy: Have internal origin writing API take sepolicy
Ensures it's labeled consistently. Prep for staged deployments which reworks the
logic around when the origin file is written.
Closes: #1505
Approved by: jlebon
Colin Walters [Mon, 19 Mar 2018 15:57:20 +0000 (11:57 -0400)]
lib/deploy: Use in-function error prefixing more
Pulling some of this out of stage deploy work. It's generally better as it's
easier to change functions to have multiple callers.
Closes: #1505
Approved by: jlebon
Colin Walters [Mon, 19 Mar 2018 13:46:20 +0000 (09:46 -0400)]
main, status: Factor out deployment printing into helper
Prep for staged deployments; they won't be in the primary deployment
list, and we want to print them first.
Also pull in some code from rpm-ostree for the red/bold bits and use
that tree-wide.
Update submodule: libglnx
Closes: #1504
Approved by: jlebon
Colin Walters [Fri, 16 Mar 2018 01:15:51 +0000 (21:15 -0400)]
lib/deploy: Port various functions to declare-and-initialize
Just noticed this while working on the code.
Closes: #1499
Approved by: jlebon
Luca Bruno [Fri, 16 Mar 2018 21:33:11 +0000 (21:33 +0000)]
rust/bupsplit: minor idiomatic fixes
This fixes a few un-idiomatic bits in Rust bupsplit code, getting rid
of some unchecked casts and an assert statement.
Closes: #1502
Approved by: cgwalters
Jonathan Lebon [Wed, 14 Mar 2018 14:36:48 +0000 (10:36 -0400)]
lib/fetcher: Allow clients to append to User-Agent
We do already have `http-headers`, which potentially could be used to
allow clients to completely override the field, but it seems like the
more common use case is simply to append.
Closes: #1496
Approved by: cgwalters
Jonathan Lebon [Fri, 16 Mar 2018 18:19:28 +0000 (14:19 -0400)]
lib/core: Support <remote>: syntax when listing refs
Allow users to pass `<remote>:` to list all refs we have locally
belonging to `<remote>`. Also (re-)allow the similar `<remote>:.` syntax
for backwards compatibility with flatpak.
Closes: #1500
Approved by: cgwalters
Colin Walters [Fri, 9 Mar 2018 18:26:07 +0000 (13:26 -0500)]
tests/str: Rework invocation
Let's make our `run.sh` generically support any playbook. This is prep for
writing further tests in Ansible. Along with that, rework the Ansible so that
`tests.yml` is a playbook, and then the other bits are just task lists. It's
easier to read.
I also started to add a `use_git_build` variable with the idea that we'll be
able to run these same tests against an upstream image by setting that variable
off.
Closes: #1493
Approved by: jlebon
Colin Walters [Mon, 12 Mar 2018 18:55:51 +0000 (13:55 -0500)]
sysroot: Rework how we find booted deployment
I was looking at this code in prep for "staging" deployments,
and there are several cleanups to be made here. The first
thing I noticed is that we look for the `ostree=` kernel argument,
but the presence of that should be exactly equivalent to having
`/run/ostree-booted` exist. We just added a member variable for
that, so let's make use of it.
Related to this, we were erroring out if we had the karg but
didn't find a deployment. But this can happen if e.g. one is
using `ostree admin --sysroot` from an ostree-booted system! It's
actually a bit surprising no one has reported this so far; I guess
in the end people are either using non-ostree systems or running
from containers.
Let's add a member variable `root_is_sysroot` that we can use
to determine if we're looking at `/`. Then, our more precise
"should find a booted deployment" state is when both `ostree_booted`
and `root_is_sysroot` are TRUE.
Next, rather than walking all of the deployments after parsing,
we can inline the `fstatat()` while parsing. The mild ugly
thing about this is assigning to the sysroot member variable while
parsing, but I will likely clean that up later, just wanted to avoid
rewriting everything in one go.
Closes: #1497
Approved by: jlebon
Colin Walters [Mon, 12 Mar 2018 17:24:09 +0000 (13:24 -0400)]
sysroot: Track whether /run/ostree-booted exists
Prep for further work around deployment staging.
Closes: #1497
Approved by: jlebon
Colin Walters [Mon, 12 Mar 2018 17:16:43 +0000 (13:16 -0400)]
lib/deploy: Port deployment checkout func to new style
Not sure how we missed this one before. No functional changes,
just prep for further work.
Closes: #1497
Approved by: jlebon
Rasmus Thomsen [Thu, 8 Mar 2018 16:20:11 +0000 (17:20 +0100)]
configure: add option for libsystemd
Until now ostree checked for libsystemd and enabled
support for it if it found it. This commit changes that
behavior by adding an option to enable/disable libsystemd.
This is especially useful if one uses a source based distro
(like Gentoo/Exherbo), where one wants to avoid such automagic
detection of dependencies and prefers switches for that instead.
Closes: #1490
Approved by: cgwalters
Colin Walters [Mon, 12 Mar 2018 22:02:04 +0000 (18:02 -0400)]
tests: Avoid generating lots of output in itest-payload-link
We noticed this in a recent PR. While I'm here, also only do
the `find` once, add `-type l` for good measure, and use our
built in `libtest.sh` assertion functions.
Closes: #1494
Approved by: giuseppe
Joaquim Rocha [Mon, 12 Mar 2018 12:24:22 +0000 (13:24 +0100)]
pull: Ignore the cancellable when aborting a transaction
In ostree_repo_abort_transaction, if we pass a cancellable and it gets
canceled, then the function may fail to fully clean up the transaction
state. This was happening e.g. when the ostree_repo_pull_with_options
call got cancelled.
To fix this, as suggested by Colin Walters, we set the passed
cancellable as NULL, in order for it to be ignored.
https://github.com/ostreedev/ostree/issues/1491
Closes: #1492
Approved by: jlebon
Colin Walters [Thu, 22 Feb 2018 19:16:33 +0000 (14:16 -0500)]
ci: Rework installed tests to use Fedora Standard Test interface
Reusing the way `standard-test-roles` has support for booting
a qcow2 actually gets us to the "VM-in-container" flow. Plus
Ansible over shell script is sometimes nicer.
https://fedoraproject.org/wiki/CI/Tests#Testing_an_Atomic_Host
It's better than what we were doing before for installed tests,
and moreover using Ansible more broadly for testing is going
to align us better with Fedora's CI.
As part of this I split off a "libpaprci" which I intend to maintain
as a "copylib" for a little bit between ostree/rpm-ostree, and then
we'll figure out how to expand from there (maybe some of the patterns
get "baked in" to PAPR for example).
Note the `FAH27-insttests` context moves to the top since it's now
of primary importance, and I expect that we start expanding it.
Closes: #1462
Approved by: jlebon
Jeremy Hiatt [Thu, 8 Mar 2018 01:44:43 +0000 (01:44 +0000)]
lib/repo: Fix multi-signature support when generating summary files
Ensure that the metadata object is built up with the signatures from all keys
passed to ostree_repo_add_gpg_signature_summary(). Previously only the signature
from the last key would end up in the metadata.
Closes: #1488
Closes: #1489
Approved by: jlebon
Giuseppe Scrivano [Fri, 2 Feb 2018 13:01:08 +0000 (14:01 +0100)]
commit: add logic for .payload-link
When a new object is added to the repository, create a
$PAYLOAD-SHA256.payload-link symlink file as well. The target of the
symlink is the checksum of the object that was added the repository.
Whenever we add a new object file, in addition to lookup if the file is
already present with the same checksum we also check if an object with
the same payload is in the repository.
If a file with the same payload is already present in the repository, we
copy it with `glnx_regfile_copy_bytes` that internally attempts to
create a reflink (ioctl (..., FICLONE, ..)) to the target file if the
file system supports it. This enables to have objects that share the
payload but have a different inode and xattrs.
By default the payload-link-threshold value is G_MAXUINT64 that disables
the feature.
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
Closes: #1443
Approved by: cgwalters
Giuseppe Scrivano [Fri, 2 Feb 2018 12:58:40 +0000 (13:58 +0100)]
ostree: introduce PAYLOAD_LINK object type
It will be used by successive commits to keep track of the payload
checksum for objects stored in the repository.
The goal is that files having the same payload but different xattrs can
take advantage of reflinks where supported.
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
Closes: #1443
Approved by: cgwalters
Giuseppe Scrivano [Wed, 14 Feb 2018 12:24:43 +0000 (13:24 +0100)]
ostree-repo-private: remove declaration for _ostree_repo_find_object
it was removed with:
commit
8609cb036b935ce942214e9fdee6d90de0a210af
Author: Colin Walters <walters@verbum.org>
Date: Thu Apr 21 15:14:51 2016 -0400
repo: Simplify internal has_object() lookup code
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
Closes: #1443
Approved by: cgwalters
Colin Walters [Mon, 5 Mar 2018 22:18:54 +0000 (17:18 -0500)]
docs/prune: Document that --static-deltas-only isn't that useful
This is the documentation followup to: https://github.com/ostreedev/ostree/pull/1482
See also https://github.com/ostreedev/ostree/issues/1481
Closes: #1484
Approved by: jlebon
Colin Walters [Mon, 5 Mar 2018 22:31:12 +0000 (17:31 -0500)]
repo/refs: Clean up error prefixing
Add some "function global" prefixing in line with what we do in
other places now, and drop the "manual filename" prefixing that
is no longer necessary since
https://github.com/GNOME/libglnx/commit/
23f7df15006f14ddc3bc2ddee690f7f8604c3ebe
Closes: https://github.com/ostreedev/ostree/issues/1467
Closes: #1485
Approved by: jlebon
Matthew Leeds [Sat, 3 Mar 2018 20:57:12 +0000 (12:57 -0800)]
lib: Fix memory leaks of OstreeRemote
The _ostree_repo_get_remote() and _ostree_repo_get_remote_inherited()
methods transfer ownership of the returned OstreeRemote to the caller,
so this commit fixes a few call sites that weren't properly freeing it.
Closes: #1478
Approved by: cgwalters
Colin Walters [Mon, 5 Mar 2018 15:42:19 +0000 (10:42 -0500)]
prune: Error if --static-deltas-only without --delete-commit
The original changes here apparently had the *idea* that `--static-deltas-only`
would be useful in general, but we never implemented that. The current
situation where it's ignored unless `--delete-commit` is specified is
very misleading and I can easily see it leading to data loss for people.
Let's error out until we have a chance to make it actually useful.
Related: https://github.com/ostreedev/ostree/issues/1479
Closes: #1482
Approved by: giuseppe
Colin Walters [Mon, 5 Mar 2018 15:56:45 +0000 (10:56 -0500)]
lib/repo: Do account for size with prune --no-prune
I think this got changed in a refactor. We definitely want
to total up the amount of space that *would* be freed even
with `--no-prune` AKA `OSTREE_REPO_PRUNE_FLAGS_NO_PRUNE`.
It's actually a bit terrifying this is apparently the first test case for
the `--no-prune` option...
Closes: https://github.com/ostreedev/ostree/issues/1480
Closes: #1483
Approved by: jlebon
Matthew Leeds [Thu, 1 Mar 2018 23:43:38 +0000 (15:43 -0800)]
lib/repo-finder-mount: Improve debug message
This makes it easier to tell which mount is being checked when repos are
found.
Closes: #1477
Approved by: cgwalters
Matthew Leeds [Thu, 1 Mar 2018 23:44:42 +0000 (15:44 -0800)]
lib/remote: Fix memory leak
Closes: #1476
Approved by: cgwalters
Matthew Leeds [Wed, 28 Feb 2018 23:58:41 +0000 (15:58 -0800)]
lib/repo-finder-mount: Update comment about paths
This updates the gtk-doc comment for OstreeRepoFinderMount to match the
correct flatpak repo path, which was fixed in commit
6db6268df.
Closes: #1473
Approved by: cgwalters
Matthew Leeds [Thu, 1 Mar 2018 00:06:31 +0000 (16:06 -0800)]
lib/repo-pull: Fix free function for hash table
The "ref_original_commits" hash table uses string values, not variants,
so fix the free function passed to g_hash_table_new_full (). Since
g_variant_unref isn't NULL safe, this prevents an assertion failure when
a NULL value is inserted.
Dan Nicholson suggested this patch; I'm just submitting it because he's
busy.
Fixes https://github.com/ostreedev/ostree/issues/1433
Closes: #1474
Approved by: cgwalters
Jonathan Lebon [Wed, 28 Feb 2018 17:30:18 +0000 (17:30 +0000)]
lib/sysroot: Fix retrieving non-booted pending deployment
If we're booted into a deployment, then any queries for the pending
merge deployment of a non-booted OS will fail due all of them being
considered rollback.
Fix this by filtering by `osname` *before* determining if we've crossed
the booted deployment yet.
Closes: #1472
Approved by: cgwalters
Matthew Leeds [Tue, 27 Feb 2018 02:54:54 +0000 (18:54 -0800)]
lib/repo-finder-mount: Fix path to flatpak repo
OstreeRepoFinderMount checks mounts for a few well-known directories
such as "ostree/repo" and ".ostree/repo" to try to find remotes. One of
the hard-coded directories is "var/lib/flatpak" but that's the flatpak
directory, not the ostree repo used by flatpak, which is at
"var/lib/flatpak/repo". So this commit changes the path so the repo can
be found.
For recent versions of Endless, flatpak uses /ostree/repo as its
repository, so this commit won't make a difference there. But it may
help on other operating systems.
Closes: #1471
Approved by: cgwalters
Colin Walters [Mon, 26 Feb 2018 19:11:00 +0000 (14:11 -0500)]
bash-completion: Remove `admin` completions
The `admin` commandline should be considered a demo; I just added
the `pin` command *mostly* so we could use it for unit tests, although
I can imagine other people using it.
But maintaining completions is a lot of overhead right now, let's not
do it for `admin`.
The other command line options that operate on repos we will definitely maintain
since they're used in releng contexts.
Closes: #1468
Approved by: jlebon
Colin Walters [Fri, 23 Feb 2018 17:46:32 +0000 (12:46 -0500)]
sysroot: Add concept of deployment "pinning" 📌
Example user story: Jane rebases her OS to a new major version N, and wants to
keep around N-1 even after a few upgrades for a while so she can easily roll
back. I plan to add `rpm-ostree rebase --pin` to opt-in to this for example.
Builds on the new `libostree-transient` group to store pinning state there.
Closes: https://github.com/ostreedev/ostree/issues/1460
Closes: #1464
Approved by: jlebon
Colin Walters [Fri, 23 Feb 2018 19:23:38 +0000 (14:23 -0500)]
sysroot: Add API to clean up transient keys in origin files
The `origin/unlocked` and `origin/override-commit` keys are examples of state
that's really transient; we don't want to maintain them across upgrades. Right
now there are bits for this in both `ostree admin upgrade` as well as in
rpm-ostree.
This new API will slightly clean up both cases, but it's really prep for adding
a concept of deployment "pinning" that will live in the new
`libostree-transient` group.
Closes: #1464
Approved by: jlebon
Colin Walters [Mon, 26 Feb 2018 17:26:32 +0000 (12:26 -0500)]
sysroot: Bump mtime when writing an origin file
This ensures that e.g. `rpm-ostreed` will get notified of the changes.
Closes: #1464
Approved by: jlebon
Simon McVittie [Wed, 17 Jan 2018 14:07:32 +0000 (14:07 +0000)]
Use Python 3 for tests
Signed-off-by: Simon McVittie <smcv@debian.org>
Closes: #1463
Approved by: cgwalters
Simon McVittie [Wed, 17 Jan 2018 15:19:12 +0000 (15:19 +0000)]
tests/bootloader-entries-crosscheck: Use Python 3-friendly sorting
This is a little clearer than a strcmp()-style negative/zero/positive
return, and also works in Python 2.
Signed-off-by: Simon McVittie <smcv@debian.org>
Closes: #1457
Approved by: cgwalters
Simon McVittie [Wed, 17 Jan 2018 15:03:59 +0000 (15:03 +0000)]
test-concurrency: Explicitly use floor division
Python 3 is pickier about this. Python 2.7 has Python 3-compatible
semantics for division when the division feature is imported from the
future.
Signed-off-by: Simon McVittie <smcv@debian.org>
Closes: #1457
Approved by: cgwalters
Simon McVittie [Wed, 17 Jan 2018 14:42:20 +0000 (14:42 +0000)]
test-concurrency: Replace range with xrange
range in Python 3 does what xrange did in Python 2. This still works in
Python 2, it just uses a bit more memory.
Signed-off-by: Simon McVittie <smcv@debian.org>
Closes: #1457
Approved by: cgwalters
Simon McVittie [Wed, 17 Jan 2018 14:25:26 +0000 (14:25 +0000)]
test-concurrency: Use Python 3 syntax for octal
This also works in Python 2.7, and is a little clearer.
Signed-off-by: Simon McVittie <smcv@debian.org>
Closes: #1457
Approved by: cgwalters
Colin Walters [Thu, 15 Feb 2018 13:55:40 +0000 (08:55 -0500)]
build-sys: Post-release version bump
Closes: #1455
Approved by: jlebon
Colin Walters [Thu, 15 Feb 2018 13:53:39 +0000 (08:53 -0500)]
Release 2018.2
There are enough fixes here, and there are some potentially larger patches
incoming like wmanley's checkout speedups and the payload link that will need
soak time in master.
Closes: #1455
Approved by: jlebon
Colin Walters [Wed, 14 Feb 2018 20:28:17 +0000 (15:28 -0500)]
fetcher: Drop max queue size assertion in libsoup/libcurl backends
Since
f4d1334e19ce3ab2f8872b1e28da52044f559401 the primary pull code maintains a
maximum queue. In that commit message I said `Note that I kept an assertion.`.
But I think this is wrong since while it covers a lot of the normal cases, if
one is e.g. trying to fetch a ton of refs, the primary pull code doesn't yet
queue those. While it'd be nice to queue those, it isn't worth carrying
extra assertions in the backends that can still trigger.
Closes: https://github.com/ostreedev/ostree/issues/1451
Closes: #1453
Approved by: dbnicholson
Alex Kiernan [Wed, 14 Feb 2018 21:03:18 +0000 (21:03 +0000)]
Fix static-compiler when CC includes args
Ensure arguments are quoted so that if you include args in CC that
they're handled as a whole.
Closes: #1454
Approved by: cgwalters
Colin Walters [Thu, 8 Feb 2018 21:33:18 +0000 (16:33 -0500)]
core: Add API (and standard concept for) content checksum
There are a few cases for knowing whether a commit has identical
content to another commit. Some people want to do a "promotion workflow",
where the content of a commit on a tesitng branch is then "promoted"
to a production branch with `ostree commit --tree=ref`.
Another use case I just hit in rpm-ostree deals with
[jigdo](https://github.com/projectatomic/rpm-ostree/issues/1081) where we're
importing RPMs on both the client and server, and will be using the
content checksum, since the client/server cases inject different metadata
into the commit object.
Closes: https://github.com/ostreedev/ostree/issues/1315
Closes: #1449
Approved by: jlebon
Matthew Leeds [Thu, 8 Feb 2018 22:13:45 +0000 (14:13 -0800)]
lib/pull: Properly remove temporary remotes
For P2P pulls ostree adds temporary remotes and removes them in
find_remotes_cb(). However, if an OstreeRepoFinderResult gets freed
during the course of that function, the OstreeRemote in the result is
freed but a pointer to it remains in the remotes_to_remove array. This
means that when _ostree_repo_remove_remote() gets called on it at the
end of the function it will fail. In my case the resulting error was
"OSTree-CRITICAL **: _ostree_repo_remove_remote: assertion 'remote->name
!= NULL' failed" but I think it could also seg fault.
This commit adds a reference to the remote so it can be properly removed
when we're finished with it.
Closes: #1450
Approved by: giuseppe
Colin Walters [Tue, 6 Feb 2018 15:13:46 +0000 (10:13 -0500)]
repo: Create uncompressed-object-cache dir dynamically
Having the `uncompressed-object-cache` directory in `archive` repos by default
is clutter; the functionality should be considered deprecated.
Now we only create the directory if we're doing a checkout with the cache
enabled.
Closes: #1446
Approved by: jlebon
Jonathan Lebon [Thu, 1 Feb 2018 22:32:32 +0000 (22:32 +0000)]
lib/checkout: add filter API to skip over files
This is analogous to the filtering support for the commit API: we allow
library users to skip over checking out specific files. This is useful
in some tricky situations where we *know* that the files to be checked
out will conflict with existing files in subtle ways.
One such example is in rpm-ostree support for multilib. There, we want
to allow checking out a package onto an existing tree, but skipping over
files that are not coloured to our preferred value (e.g. not overwriting
an i686 version of `ldconfig` if we already have the `x86_64` version).
See https://github.com/projectatomic/rpm-ostree/pull/1227 for details.
Closes: #1441
Approved by: cgwalters
Alex Kiernan [Sun, 4 Feb 2018 12:08:29 +0000 (12:08 +0000)]
switchroot: Fix split source/build directory
If you have split source and build directories, then building
static ostree-prepare-root fails to find the source files.
https://github.com/ostreedev/ostree/issues/1429
Closes: #1445
Approved by: cgwalters
Colin Walters [Thu, 25 Jan 2018 10:57:56 +0000 (11:57 +0100)]
docs: Dual license under CC BY-SA and the GFDL
This will allow the text to be used in Wikipedia for example; it
also just makes more sense for documentation than the LGPLv2+.
Closes: #1431
Closes: #1432
Approved by: jlebon
Jonathan Lebon [Thu, 1 Feb 2018 22:10:47 +0000 (22:10 +0000)]
bin/checkout: add --selinux-policy switch
This was already supported by the underlying API. Expose it so that we
can test it.
Closes: #1442
Approved by: cgwalters
Jonathan Lebon [Thu, 1 Feb 2018 22:07:36 +0000 (22:07 +0000)]
tests/installed: support TESTS filter
Lifted from rpm-ostree. Makes iterating on a single test much faster.
Example use:
TESTS=label-selinux ./ostree/tests/installed/run.sh
Closes: #1442
Approved by: cgwalters
Jonathan Lebon [Thu, 1 Feb 2018 22:06:50 +0000 (22:06 +0000)]
libotutil: factor out utility to parse file by line
This will be used in the checkout CLI as well.
Closes: #1442
Approved by: cgwalters
Colin Walters [Fri, 2 Feb 2018 18:46:15 +0000 (13:46 -0500)]
deploy: SELinux-relabel installed kernel/initramfs data
When we changed around the kernel location in rpm-ostree, we
started installing the kernel into `/boot` as `modules_object_t`,
and the current policy didn't permit that. For maximum compatibility,
relabel installed kernel/initramfs/dtb as `boot_t`.
https://bugzilla.redhat.com/show_bug.cgi?id=
1536991
Closes: #1444
Approved by: jlebon
Marcus Folkesson [Tue, 30 Jan 2018 19:26:26 +0000 (20:26 +0100)]
Add SPDX-License-Identifier to source files
SPDX License List is a list of (common) open source
licenses that can be referred to by a “short identifier”.
It has several advantages compared to the common "license header texts"
usually found in source files.
Some of the advantages:
* It is precise; there is no ambiguity due to variations in license header
text
* It is language neutral
* It is easy to machine process
* It is concise
* It is simple and can be used without much cost in interpreted
environments like java Script, etc.
* An SPDX license identifier is immutable.
* It provides simple guidance for developers who want to make sure the
license for their code is respected
See http://spdx.org for further reading.
Signed-off-by: Marcus Folkesson <marcus.folkesson@gmail.com>
Closes: #1439
Approved by: cgwalters
Colin Walters [Mon, 29 Jan 2018 12:48:02 +0000 (13:48 +0100)]
switchroot: Ensure /sysroot is set to "private" propagation
Downstream BZ: https://bugzilla.redhat.com/show_bug.cgi?id=
1498281
This came up as a problem with `oci-umount` which was trying to ensure some host
mounts like `/var/lib/containers` don't leak into privileged containers. But
since our `/sysroot` mount wasn't private we also got a copy there.
We should have done this from the very start - it makes `findmnt` way, way less
ugly and is just the obviously right thing to do, will possibly create world
peace etc.
Closes: #1438
Approved by: rhvgoyal
Philip Withnall [Mon, 29 Jan 2018 14:14:29 +0000 (14:14 +0000)]
lib/core: Expand documentation for ostree_parse_refspec()
The old documentation had outdated and incomplete annotations, and
didn’t make it very clear that out_remote could legitimately return
NULL.
Signed-off-by: Philip Withnall <withnall@endlessm.com>
Closes: #1437
Approved by: cgwalters
Colin Walters [Tue, 9 Jan 2018 18:01:47 +0000 (13:01 -0500)]
ci: Bump flatpak version (and build to f27)
Just keeping this updated.
Closes: #1400
Approved by: jlebon
Matthew Leeds [Thu, 18 Jan 2018 08:32:05 +0000 (00:32 -0800)]
lib/pull: Allow specific commits in P2P updates
Currently users of the find_remotes_async()/pull_from_remotes_async()
functions have no way to specify a commit hash to use instead of the
latest one available. This commit implements an "override-commit-ids"
option analogous to the one used by ostree_repo_pull_with_options().
It's accomplished by returning OstreeRepoFinderResult objects pointing
to the given commit checksum(s) regardless of which ones were available
from the remotes, but in the future this implementation could be
improved to take into account the commits advertised by the remotes.
One effect of this is that flatpak will have the ability to downgrade
apps that use collection IDs
(https://github.com/flatpak/flatpak/issues/1309).
Closes: #1425
Approved by: pwithnall
Colin Walters [Thu, 18 Jan 2018 14:19:21 +0000 (09:19 -0500)]
bin/delta: Fix compilation with relative subdirs --filename
Currently we were parsing `opt_filename` twice...I dug through
the history a bit and it looks like it may have been an accident
from refactoring.
What we're fixing here concretely is that using relative subdirectories
like `--filename somesubdir/foo` broke because we were incorrectly
passing the `somesubdir/` again.
Closes: #1423
Closes: #1427
Approved by: jlebon
Colin Walters [Tue, 9 Jan 2018 18:20:24 +0000 (13:20 -0500)]
ci: Run a subset ⊂ of rpm-ostree's tests
This is a quick hack to get us more than unit testing, albeit indirectly.
See: https://github.com/projectatomic/rpm-ostree/issues/662
Closes: #771
Approved by: jlebon
Colin Walters [Thu, 18 Jan 2018 14:01:27 +0000 (09:01 -0500)]
ci/papr: Update most contexts to f27
Many of them actually already *were* because they
were inherting.
An exception is flatpak which is being worked on in
https://github.com/ostreedev/ostree/pull/1400
Closes: #1426
Approved by: jlebon
Colin Walters [Wed, 17 Jan 2018 14:18:45 +0000 (09:18 -0500)]
lib/pull: Port a few functions to new style
Prep for further work here. This diff is a bit noisy for the delta bits because
the identation was off originally as well.
Closes: #1424
Approved by: jlebon
William Manley [Tue, 9 Jan 2018 19:40:07 +0000 (19:40 +0000)]
Add support for devicetree files alongside the kernel and initramfs
Much like the (optional) initramfs at
`/usr/lib/ostree-boot/initramfs-<SHA256>` or
`/usr/lib/modules/$kver/initramfs` you can now optionally include a
flattened devicetree (.dtb) file alongside the kernel at
`/usr/lib/ostree-boot/devicetree-<SHA256>` or
`/usr/lib/modules/$kver/devicetree`.
This is useful for embedded ARM systems which need the devicetree file
loaded by the bootloader for the kernel to discover and initialise
hardware. See https://en.wikipedia.org/wiki/Device_tree for more
information.
This patch was mostly produced by copy-pasting code for initramfs handling
and renaming `s/initramfs/devicetree/g`. It's not beautiful, but it is
fairly straightforward.
It may be useful to extend device-tree support in a number ways in the
future. Device trees dependant on many details of the hardware they
support. This makes them unlike kernels, which may support many different
hardware variants as long as the instruction-set matches. This means that
a ostree tree created with a device-tree in this manner will only boot on
a single model of hardware. This is sufficient for my purposes, but may
not be for others'.
I've tested this on my NVidia Tegra TK1 device which has u-boot running
in syslinux-compatible mode.
Closes: #1411
Approved by: cgwalters
William Manley [Mon, 6 Mar 2017 19:41:46 +0000 (19:41 +0000)]
syslinux: Add support for DEVICETREE from bootloader spec
The bootloader spec says:
> `devicetree` refers to the binary device tree to use when executing the
> kernel. This also shall be a path relative to the `$BOOT` directory. This
> key is optional. Example:
> `
6a9857a393724b7a981ebb5b8495b9ea/3.8.0-2.fc19.armv7hl/tegra20-paz00.dtb`
This is necessary for booting my NVidia Tegra TK1 device. It uses u-boot
with syslinux compatibility. In the syslinux files that come with the
device this is called `FDT`, but u-boot treats `FDT and `DEVICETREE` as
synonyms.
See also: [
f43c401 in u-boot].
[
f43c401 in u-boot]: http://git.denx.de/?p=u-boot.git;a=commit;h=
f43c401b72bb0db43ab0b55c4a79e1f4889d3aa2
Closes: #1411
Approved by: cgwalters
William Manley [Mon, 15 Jan 2018 20:53:54 +0000 (20:53 +0000)]
ostree admin deploy: Add --no-prune option
If you want cleanup, but don't want to prune the repo. Pruning can
be quite expensive so ostree admin deploy can be much faster without
pruning.
Closes: #1418
Approved by: cgwalters
William Manley [Sat, 13 Jan 2018 15:30:17 +0000 (15:30 +0000)]
ostree admin deploy: Refactor bringing cleaning into `main`
In the next commit I will add --no-prune which will affect cleaning. By
doing this refactor we avoid having to add a NO_PRUNE flag.
Closes: #1418
Approved by: cgwalters
Matthew Leeds [Sat, 13 Jan 2018 00:32:09 +0000 (16:32 -0800)]
find-remotes: Minor fixes to --finders code
This introduces no functional changes, only cleanups.
Closes: #1414
Approved by: jlebon
Matthew Leeds [Thu, 11 Jan 2018 22:04:08 +0000 (14:04 -0800)]
man: Add man page for find-remotes
Closes: #1410
Approved by: pwithnall
Matthew Leeds [Sat, 13 Jan 2018 06:22:50 +0000 (22:22 -0800)]
man: Update ostree-summary.xml
Update the man page for the summary command to add the undocumented
options, make the syntax clear, and add examples.
Closes: #1416
Approved by: pwithnall
Colin Walters [Mon, 15 Jan 2018 14:34:45 +0000 (09:34 -0500)]
build-sys: Post-release version bump
I'm still doing release, then versionbump as separate PRs to ensure
the release commit is tested by itself.
Closes: #1417
Approved by: pwithnall
Colin Walters [Fri, 12 Jan 2018 20:27:44 +0000 (15:27 -0500)]
Release 2018.1
In particular I'd like to get the `--copyup` changes out for an rpm-ostree
release that will use them. But there are other good changes here, and let's
keep up a regular release train 🚄 in general.
Closes: #1413
Approved by: jlebon
Colin Walters [Fri, 12 Jan 2018 14:15:21 +0000 (09:15 -0500)]
lib: Validate metadata structure more consistently during pull
Previously we were doing e.g. `ot_util_filename_validate()` specifically inline
in dirtree objects, but only *after* writing them into the staging directory (by
default). In (non-default) cases such as not using a transaction, such an object
could be written directly into the repo.
A notable gap here is that `pull-local --untrusted` was *not* doing
this verification, just checksums. We harden that (and also the
static delta writing path, really *everything* that calls
`ostree_repo_write_metadata()` to also do "structure" validation
which includes path traversal checks. Basically, let's try hard
to avoid having badly structured objects even in the repo.
One thing that sucks in this patch is that we need to allocate a "bounce buffer"
for metadata in the static delta path, because GVariant imposes alignment
requirements, which I screwed up and didn't fulfill when designing deltas. It
actually didn't matter before because we weren't parsing them, but now we are.
In theory we could check alignment but ...eh, not worth it, at least not until
we change the delta compiler to emit aligned metadata which actually may be
quite tricky. (Big picture I doubt this really matters much right now
but I'm not going to pull out a profiler yet for this)
The pull test was extended to check we didn't even write a dirtree
with path traversal into the staging directory.
There's a bit of code motion in extracting
`_ostree_validate_structureof_metadata()` from `fsck_metadata_object()`.
Then `_ostree_verify_metadata_object()` builds on that to do checksum
verification too.
Closes: #1412
Approved by: jlebon
Colin Walters [Fri, 12 Jan 2018 15:40:36 +0000 (10:40 -0500)]
lib/checkout: Validate pathnames during checkout
While we do protect against path traversal during pull, let's also validate
during checkout; it's a cheap operation and provides good last-mile protection.
Closes: #1412
Approved by: jlebon